// 思路：使用reduce 使得代码更简略，并且观摩这道算法
// 加深了对reduce 参数的理解
// array.reduce((prev,cur,index,array)=>{},init)
// prev 代表上一次返回值， cur 代表当前遍历处理的值
// index 代表当前遍历的索引   array 代表遍历函数
// init 初始化值   其中 index,array,init 都是可选参数


var romanToInt = function(s) {
    let map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    let sArr = s.split('').reverse() // 倒转，从右到左处理因此注意处理条件
    return sArr.reduce((res, str, index, arr)=>{
        // res代表上一次reduce返回的值
        // str代表本次遍历中 sArr[index]的值
        // index代表本次遍历数组的index索引
        // arr代表本次被遍历的数组sArr
        if(index == 0) return map[str]
        let pre = map[arr[index - 1]] // 保留上一次的pre，也就是上一次遍历的值

        return res += map[str] >= pre ? map[str] :  - map[str]
        // 对本次的值map[str] 和上一次值 pre 值进行比较
        // 遵循如下判断
        // 如果本次值大于上次值，正常，返回值为 res + map[str]
        // 如果本次值小于上次值，异常出现算法特殊条件
        // 返回值为 res - map[str]  
    }, 0)
};
